package com.itheima.d3_tcp.no5;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

//目标：掌握利用tcp通信在客户端发送文件
public class ClientDemo05 {
    public static void main(String[] args) throws IOException {
        //1.键盘录入需要上传的文件名称
        Scanner sc = new Scanner(System.in);

        //2.创建Socket对象，尝试与服务端建立起连接
        Socket socket = new Socket("192.168.68.102", 6666);

        //3.一旦服务端连接成功，开始上传文件，提示用户输入要上传的文件路径
        System.out.println("请输入要上传的文件路径：");
        String path = sc.nextLine();

        //4.根据路径创建对应的File对象
        File file = new File(path);

        //5.获取file的文件名
        String name = file.getName();

        //6.获取输出流，包装成缓冲字节输出流
        OutputStream os = socket.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(os);

        //7.写出文件名
        bos.write(name.getBytes());
        //刷新
        bos.flush();

        //8.上面代码结束后，服务端已经收到文件名！接下来应该上传文件数据！
        //8.1 上传的文件在客户端电脑磁盘上，需要读取到客户端程序中！创建缓冲字节输入流，读取客户端磁盘上的文件！
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

        //8.2 一次读取一个字节数组，循环读取
        byte[] bys = new byte[1024];
        int len;
        while ((len = bis.read(bys)) != -1) {
            //8.3 需要将bys数组中的字节数据（磁盘文件数据）写出到网络中，服务端那边
            bos.write(bys, 0, len);
//            System.out.println(len);
        }
        bos.flush();

        //释放资源
        socket.close();
    }
}
